package com.showsu.editor.service;

import com.showsu.editor.entity.dto.MediaGetTranscodeDTO;
import com.showsu.editor.entity.dto.MediaGetVideoTranscodeDTO;
import com.showsu.editor.entity.dto.MediaVideo2AudioDTO;
import com.showsu.editor.entity.dto.MediaVideoInfoDTO;
import com.showsu.editor.utils.aliyun.TranscodeTemplateEnum;

/**
 * @Author: jph
 * @Description: 媒体服务接口类
 * @Date: Created in 16:57 下午 2023/12/22
 * @Modified By:
 */
public interface IMediaService {
    /**
     * 将视频转换成音频
     * @param videoUrl
     * @return
     */
    MediaVideo2AudioDTO getVideo2Audio(String videoUrl);

    /**
     * 将音频转换成文字
     * @param audioUrl
     * @return
     */
    String getMediaAudioAsr(String audioUrl);


    /**
     * 将长音频转换成文字
     * @param audioUrl
     * @return
     */
    String getMediaLongAudioAsr(String audioUrl);

    /**
     * 获取视频信息接口, 只能获取showsu oss上的文件信息。否则返回null
     * @param videoUrl
     * @return
     */
    MediaVideoInfoDTO getVideoInfo(String videoUrl);

    /**
     * 将视频转码
     * @param videoUrl 视频链接
     * @param format 转码格式 格式错误将返回null 参看TranscodeTemplateEnum的code参数
     * @return
     */
    MediaGetVideoTranscodeDTO getVideoTranscode(String videoUrl, String format);

    /**
     * 将视频转码
     * @param videoUrl 视频链接
     * @param format 转码格式枚举类 格式错误将返回null
     * @return
     */
    MediaGetVideoTranscodeDTO getVideoTranscode(String videoUrl, TranscodeTemplateEnum format);

    /**
     * 提取视频关键帧图像（仅支持对视频编码格式为H264和H265的视频文件进行视频截帧。）
     * @param videoUrl 必须将视频上传至OSS存储空间,不然返回null
     * @param time 指定截图时间。如果设置的截图时间t超过了视频时长，则返回视频的最后一帧。单位：ms
     * @param width 指定截图宽度，如果指定为0，则根据截图高度与源视频高度比例自动计算。单位：像素（px）
     * @param height 指定截图高度，如果指定为0，则根据截图宽度与源视频宽度比例自动计算；如果w和h都为0，则输出为原视频宽高。单位：像素（px）
     * @return 图片链接
     */
    String getVideoSnapshot(String videoUrl,Integer time,Integer width,Integer height);

    /**
     * 将图片转码
     * @param imgUrl 图片链接
     * @param format 转码格式 格式错误将返回null
     * @return
     */
    MediaGetTranscodeDTO getImageTranscode(String imgUrl, String format);

}
